home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 352_01 / strpptok.cpp < prev    next >
C/C++ Source or Header  |  1991-04-28  |  1KB  |  50 lines

  1. // STRPPTOK.CPP  String::tokenize()  parse original string into tokens.
  2. //            RETURNS: ptr to newly constructed String.            
  3. //                    NOTE: caller has to delete each returned string
  4. //                          or they will accumulate on the heap.
  5. //
  6. //            the chars from the token string are at the end of the new String
  7. //            tokenize progressively decimates 'this' down to a \0.
  8. //        example:
  9. //        String  x="a+b-3";    String *y;
  10. //                y = x.tokenize("+-");    Now x="b-3", y="a"
  11. //                delete y;
  12. //                y = x.tokenize("+-");    Now x="3";   y="b"
  13. //                delete y;
  14. //                y = x.tokenize("+-");    Now x=NULL,  y="3"
  15. //                delete y;
  16. //
  17. //        if no tokens are found, the entire string is returned 
  18. //            and 'this' is decimated.
  19. //            
  20. //        obeys String::caseSens.
  21. //
  22. #include <stdlib.h>
  23. #include <string.h>
  24.  
  25. #include "dblib.h"
  26.  
  27. String *String::tokenize ( char *tok )
  28.     {
  29.     String *tmp;
  30.     char *ss=s;  int   sn=n;
  31.     
  32.     int i = findAny (tok);        // findAny protects against NULL.
  33.             
  34.     if ( i == -1 )        // ie, no tokens found in parent string.
  35.         {
  36.         tmp = new String;
  37.         tmp->s = ss;            // transfer entire string over.
  38.         tmp->n = sn;            //      ie: this->s now owned by *tmp
  39.         s=NULL;                    // DONT let destructor free this->s !!!
  40.         n=0;
  41.         }
  42.     else
  43.         {                        // token found at position i.
  44.         tmp = substring ( 0, i );        // make new string with that part.
  45.         slide ( 0, i );                    // remove that part from original.
  46.         }
  47.     return tmp;
  48.     };        // end String::tokenize()    
  49.  
  50.